/**
 * 
 */
package com.offroader.pay.alipay;

import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;

import com.alipay.sdk.app.PayTask;
import com.offroader.pay.PayResultListener;
import com.offroader.task.EasyTask;
import com.offroader.utils.ViewUtils;

/**
 * 支付宝
 */
public class AlipayPayHelper {
	private static final AlipayPayHelper instance = new AlipayPayHelper();
	private static final String PAY_STATUS_SUCCESS = "9000";//支付成功
	private static final String PAY_STATUS_RESULT_WAIT = "8000";//支付结果确认中

	private PayResultListener payReusltListener;

	private AlipayPayHelper() {
	}

	public static AlipayPayHelper getInstance() {
		return instance;
	}

	private static final int SDK_PAY_FLAG = 1;
	private static final int SDK_CHECK_FLAG = 2;

	private Handler mHandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case SDK_PAY_FLAG: {
				PayResult payResult = new PayResult((String) msg.obj);

				// 支付宝返回此次支付结果及加签，建议对支付宝签名信息拿签约时支付宝提供的公钥做验签
				//				String resultInfo = payResult.getResult();

				String resultStatus = payResult.getResultStatus();

				// 判断resultStatus 为“9000”则代表支付成功，具体状态码代表含义可参考接口文档
				if (TextUtils.equals(resultStatus, PAY_STATUS_SUCCESS)) {
					//					ViewUtils.toast("支付成功");
					if (payReusltListener != null) {
						payReusltListener.onPaySuccess();
					}
				} else {
					// 判断resultStatus 为非“9000”则代表可能支付失败
					// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认，最终交易是否成功以服务端异步通知为准（小概率状态）
					if (TextUtils.equals(resultStatus, PAY_STATUS_RESULT_WAIT)) {
						ViewUtils.toast("支付结果确认中");

					} else {
						// 其他值就可以判断为支付失败，包括用户主动取消支付，或者系统返回的错误
						//						ViewUtils.toast("支付失败");
						if (payReusltListener != null) {
							payReusltListener.onPayFails();
						}

					}
				}
				break;
			}
			case SDK_CHECK_FLAG: {
				ViewUtils.toast("检查结果为：" + msg.obj);
				break;
			}
			default:
				break;
			}
		};
	};

	/**
	 * 支付宝支付
	 * @param act
	 * @param orderInfo
	 */
	public void pay(final Activity act, final String orderInfo, PayResultListener payReusltListener) {

		this.payReusltListener = payReusltListener;

		//必须异步调用 
		EasyTask.addTask(new Runnable() {

			@Override
			public void run() {

				//1.构造PayTask 对象
				PayTask alipay = new PayTask(act);

				//2.调用支付接口，获取支付结果
				String result = alipay.pay(orderInfo);

				//3.支付结果处理
				Message msg = new Message();
				msg.what = SDK_PAY_FLAG;
				msg.obj = result;
				mHandler.sendMessage(msg);
			}
		});

	}

}
